/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package facade;

import java.util.Date;
import java.util.List;

import persistencia.DAO;
import vo.CategoriaVO;
import vo.CidadeVO;
import vo.CompraVO;
import vo.EnderecoVO;
import vo.FornecedorVO;
import vo.ItemCompraVO;
import vo.ItemVendaPK;
import vo.ItemVendaVO;
import vo.PessoaVO;
import vo.ProdutoVO;
import vo.SubCategoriaVO;
import vo.VendaVO;

/**
 *
 * @author Joia
 */
public class FacadeCadastrar {

    public boolean cadastrarCompra(int codCompra, int codFornecedor, Date dataCompra, int formaPagamaneto, int tipoPagamento, int numeroItens, int valorTotal,List<ItemCompraVO> listaItensCompra)throws Exception{

        FacadeBuscar facadeBusca = new FacadeBuscar();
        FornecedorVO fornecedor = (FornecedorVO)facadeBusca.buscaPorCodigo("codPessoa", codFornecedor, FornecedorVO.class).iterator().next();
        CompraVO compra = new CompraVO(codCompra, fornecedor, dataCompra, formaPagamaneto, tipoPagamento, numeroItens, valorTotal);

        boolean verifica=false;

        DAO dao = new DAO(CompraVO.class);
        boolean controle = dao.incluir(compra);

        DAO dao2 = new DAO(ItemCompraVO.class);

        for(int i =0; i < listaItensCompra.size(); i++){
            listaItensCompra.get(i).setCompra(compra);
            //inclui itemnf no banco e retorna um boolean
            verifica=dao2.incluir(listaItensCompra.get(i));
        }
        if(verifica&&controle)
            return true;
        else
            return false;
    }

    public boolean cadastrarCategoria(int codCategoria, String descricao)throws Exception{
        CategoriaVO categoria  =  new CategoriaVO(codCategoria, descricao);
        DAO dao = new DAO(CategoriaVO.class);
        boolean controle = dao.incluir(categoria);
        return controle;
    }

    public boolean cadastrarSubCategoria(int codSubCategoria,int codCategoria, String descricao)throws Exception{
        FacadeBuscar facadeBusca = new FacadeBuscar();
        CategoriaVO categoria = (CategoriaVO)facadeBusca.buscaPorCodigo("codCategoria", codCategoria, CategoriaVO.class).iterator().next();
        SubCategoriaVO subCategoria = new SubCategoriaVO(codSubCategoria,categoria,descricao);
        DAO dao = new DAO(SubCategoriaVO.class);
        boolean controle = dao.incluir(subCategoria);
        return controle;
    }


      public boolean cadastrarForncecedor(int codPessoa, String nome, String rg, String cpf, String telResidencial, String telCelular, Date dataNascimento, Date dataCadastro, String empresa,
            String nomeRua, String numero,String cep, String bairro,
            String complemento, int tipoEndereco,  String nomeCidade)throws Exception{

        String descricaoEndereco="";
        if(tipoEndereco == 0){
            descricaoEndereco = "residencial";
        }else
            if(tipoEndereco == 1){
            descricaoEndereco = "comercial";
        }

        FacadeBuscar facadeBusca = new FacadeBuscar();
        CidadeVO cidade = (CidadeVO)facadeBusca.buscaPorNome("nome",nomeCidade,CidadeVO.class).iterator().next();
        EnderecoVO endereco = new EnderecoVO(1, nomeRua, numero, cep, bairro,complemento, descricaoEndereco, cidade);
        FornecedorVO fornecedor = new FornecedorVO(codPessoa,endereco, nome, rg, cpf,telResidencial, telCelular, dataNascimento,dataCadastro, empresa);

        DAO dao2 = new DAO(EnderecoVO.class);
        dao2.incluir(endereco);
        DAO dao3 = new DAO(FornecedorVO.class);

        return  dao3.incluir(fornecedor);
    }

       public boolean cadastrarPessoa(int codPessoa,String nome, String rg, String cpf, String telResidencial, String telCelular, Date dataNascimento, Date dataCadastro,
            String nomeRua, String numero,String cep,
            String bairro,String complemento, int tipoEndereco,  String nomeCidade)throws Exception{

         String descricaoEndereco;
        if(tipoEndereco == 0){
            descricaoEndereco = "residencial";
        }else{
            descricaoEndereco = "comercial";
        }
        FacadeBuscar facadeBusca = new FacadeBuscar();
        CidadeVO cidade = (CidadeVO)facadeBusca.buscaPorNome("nome",nomeCidade,CidadeVO.class).iterator().next();
        EnderecoVO endereco = new EnderecoVO(1, nomeRua, numero, cep, bairro,complemento, descricaoEndereco, cidade);
        PessoaVO pessoa = new PessoaVO(codPessoa, endereco, nome, rg, cpf, telResidencial, telCelular, dataNascimento, dataCadastro);
        DAO dao2 = new DAO(EnderecoVO.class);
        dao2.incluir(endereco);
        DAO dao3 = new DAO(PessoaVO.class);
        return  dao3.incluir(pessoa);

    }

   public boolean cadastrarVenda(int codVenda, int codPessoa, Date dataVenda, int formaPagamaneto, int tipoPagamento, int numeroItens, int valorTotal,
            //Listas auxiliares para o cadastro
      List<ItemVendaVO> listaItens,List<ProdutoVO> listaProdutos)throws Exception{
      FacadeBuscar facadeBusca = new FacadeBuscar();
      PessoaVO pessoa = (PessoaVO)facadeBusca.buscaPorCodigo("codPessoa", codPessoa,PessoaVO.class).iterator().next();
      VendaVO venda = new VendaVO(codVenda, pessoa, dataVenda, formaPagamaneto, tipoPagamento, numeroItens, valorTotal);
      boolean verificadorUm;
      DAO dao1 = new DAO(VendaVO.class);
      verificadorUm = dao1.incluir(venda);
     //logica para cadastramento correto dos itens para o pedido solicitado
        int controle=0;
            ItemVendaVO itemVenda = new ItemVendaVO();
            boolean verificadorDois=false;
            for(int i =0; i < listaItens.size(); i++){
                //objeto para criar a chave composta
                ItemVendaPK chaveComposta= new  ItemVendaPK();
                chaveComposta.setVenda(venda);
                chaveComposta.setProduto(listaProdutos.get(controle));
                itemVenda=listaItens.get(controle);
                //seta a chave composta criada para o item
                itemVenda.setChaveComposta(chaveComposta);
                DAO dao2 = new DAO(ItemVendaVO.class);
                verificadorDois = dao2.incluir(itemVenda);
                controle++;
                }
            //controla juntamente com as variaveis controladores se o cadastro foi realizado com sucesso
            if((verificadorUm == true)&&(verificadorDois == true)){
                return true;
            }else
                return false;
    }

   public boolean cadastrarProduto(int codProduto, String descricao, int quantidadeMinima, int quantidadeAtual, Double precoCusto, Double precoVenda,int codCategoria)throws Exception{
       FacadeBuscar facadeBusca = new FacadeBuscar();
       CategoriaVO categoria = (CategoriaVO)facadeBusca.buscaPorCodigo("codCategoria", codCategoria, CategoriaVO.class).iterator().next();
       DAO dao = new DAO(ProdutoVO.class);
       ProdutoVO produto = new ProdutoVO(codProduto,descricao,quantidadeMinima,quantidadeAtual, precoCusto,precoVenda,categoria);
       return dao.incluir(produto);
    }

   
}
